const HttpException = require('../exception/http');
module.exports = () => {
  return async function errororHandler(ctx, next) {
    const method = ctx.request.method;
    // 当请求方法为OPTIONS，通常为axios做验证请求，直接响应httpStatus204 no content即可
    if (method === 'OPTIONS') {
      ctx.status = 204;
      return;
    }
    try { // 在这里捕获程序中的异常
      await next();
    } catch (error) {
      // 判断异常是不是自定义异常
      if (error instanceof HttpException) {
        ctx.status = error.httpCode;
        ctx.body = {
          code: error.code,
          message: error.message
        };
        ctx.logger.error(error.message);
        return;
      }
      // 最后其他异常统一处理  
      ctx.status = 500;
      ctx.logger.error(error.message);
      ctx.body = {
        code: 50000,
        message: error.message || '服务器异常: 异常未定义！'
      };
    }
  };
};